Init Repo

This commit is contained in:
2026-06-03 09:00:11 +08:00
commit 9be48d8b9e
155 changed files with 14827 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
#pragma once
#include <imgui.h>
#include <string>
#include <unordered_map>
namespace UsdLayerManager {
/// Symbolic icon names used throughout the UI.
enum class Icon {
// Visibility
Eye,
EyeSlash,
// Reference state
Link,
LinkSlash,
// Prim types
Globe, // PseudoRoot / World
Cube, // Mesh / Subdiv
Camera,
Lightbulb, // Light
FolderOpen, // Scope
ObjectGroup, // Xform
Swatchbook, // Material
Code, // Shader
LayerGroup, // Model
CircleDot, // Generic prim
// Viewport manipulator tools
ToolSelect, // cursor / arrow-pointer
ToolMove, // four-directional arrows
ToolRotate, // circular arrows
ToolScale, // expand/compress arrows
// Viewport display toggles
WorldSpace, // globe / world coordinate space
LocalSpace, // coordinate axes / local object space
Grid, // ground grid toggle
Antialias, // anti-aliasing toggle
// Viewport layout modes
LayoutSingle, // single viewport
LayoutHSplit, // two panels side-by-side
LayoutVSplit, // two panels top/bottom
LayoutQuad, // four panels 2×2
};
/// Loads SVG files from disk, rasterizes them with NanoSVG, uploads them as
/// OpenGL textures, and hands out ImTextureID handles for use with
/// ImGui::Image() / ImGui::ImageButton().
///
/// Lifecycle: Initialize() after OpenGL is ready, Shutdown() before context
/// is destroyed. One global instance is owned by Application.
class IconManager {
public:
IconManager();
~IconManager();
/// Load and rasterize all icons from the given directory.
/// @param iconDir Path to the directory containing the .svg files.
/// @param sizePixels Rasterisation size in pixels (both axes).
bool Initialize(const std::string& iconDir, int sizePixels = 16);
/// Release all GPU textures.
void Shutdown();
/// Return the ImTextureID for the given icon.
/// Returns a 1×1 transparent fallback texture when the icon is missing.
ImTextureID Get(Icon icon) const;
/// Pixel size the icons were rasterised at.
int SizePixels() const { return m_sizePixels; }
ImVec2 SizeVec() const { return ImVec2(static_cast<float>(m_sizePixels),
static_cast<float>(m_sizePixels)); }
private:
bool LoadSVG(Icon icon, const std::string& path);
void CreateFallback();
int m_sizePixels = 16;
ImTextureID m_fallback = ImTextureID_Invalid;
std::unordered_map<int, ImTextureID> m_textures; // key = (int)Icon
};
} // namespace UsdLayerManager