You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@
5
5
-`Engine/` builds the C++17 `PyramidEngine` library.
6
6
- Active modules are Core, Graphics, Math, Platform, and Utils.
7
7
-`Examples/BasicGame` and `Examples/BasicRendering` are the graphical references.
8
-
- `Tests/PublicApiLinkage.cpp` protects selected public symbols; `Tests/WindowResizeEventTests.cpp` protects resize callback semantics; `Tests/CameraViewportTests.cpp` protects projection resizing; `Tests/FramebufferResizeTests.cpp` protects framebuffer specification and zero-area resize behavior; `Tests/TextureLoadingTests.cpp` protects transactional file loading and OpenGL upload state; `Tests/SceneTransformTests.cpp` protects hierarchy composition, invalidation, reparenting, cycle rejection, and parent-destruction behavior; `Tests/CameraFrustumTests.cpp` protects camera orientation, frustum extraction, transformed bounds, and linear/octree scene visibility; `Tests/OctreeUpdateTests.cpp` protects incremental movement, insertion, removal, and stable-scene synchronization; `Tests/OctreeQueryTests.cpp` protects bounds-accurate point, sphere, box, and nearest-first ray queries plus linear/octree parity; `Tests/NearestQueryTests.cpp` protects bounds-distance nearest/K-nearest ordering, limits, root-overflow behavior, and octree/linear parity. `Tests/OctreeConfigurationTests.cpp` protects atomic bounds/depth/capacity changes, tracked-object preservation, invalid configuration rejection, and constructor normalization. `Tests/OctreeCompactionTests.cpp` protects automatic branch collapse after removals and movement, explicit no-op compaction, synchronization compaction statistics, object preservation, and health-metric consistency. `Tests/RenderObjectBoundsTests.cpp` protects mesh-derived/manual transformed bounds. `Tests/MeshResourceTests.cpp` protects mesh validation, immutable metadata, topology-aware indexed/non-indexed submission, and `RenderObject` integration.
8
+
- `Tests/PublicApiLinkage.cpp` protects selected public symbols; `Tests/WindowResizeEventTests.cpp` protects resize callback semantics; `Tests/CameraViewportTests.cpp` protects projection resizing; `Tests/FramebufferResizeTests.cpp` protects framebuffer specification and zero-area resize behavior; `Tests/TextureLoadingTests.cpp` protects transactional file loading and OpenGL upload state; `Tests/SceneTransformTests.cpp` protects hierarchy composition, invalidation, reparenting, cycle rejection, and parent-destruction behavior; `Tests/CameraFrustumTests.cpp` protects camera orientation, frustum extraction, transformed bounds, and linear/octree scene visibility; `Tests/OctreeUpdateTests.cpp` protects incremental movement, insertion, removal, and stable-scene synchronization; `Tests/OctreeQueryTests.cpp` protects bounds-accurate point, sphere, box, and nearest-first ray queries plus linear/octree parity; `Tests/NearestQueryTests.cpp` protects bounds-distance nearest/K-nearest ordering, limits, root-overflow behavior, and octree/linear parity. `Tests/OctreeConfigurationTests.cpp` protects atomic bounds/depth/capacity changes, tracked-object preservation, invalid configuration rejection, and constructor normalization. `Tests/OctreeCompactionTests.cpp` protects automatic branch collapse after removals and movement, explicit no-op compaction, synchronization compaction statistics, object preservation, and health-metric consistency. `Tests/RenderObjectBoundsTests.cpp` protects mesh-derived/manual transformed bounds. `Tests/MeshResourceTests.cpp` protects mesh validation, immutable metadata, topology-aware indexed/non-indexed submission, and `RenderObject` integration. `Tests/MeshCacheTests.cpp` protects deterministic identifiers, exact-content deduplication, alias conflicts, upload counts, strong residency, unused collection, explicit eviction, and external-owner lifetime.
9
9
-`Tests/Consumer` validates the installed CMake package.
10
10
-`vendor/glad` is a bundled public dependency. libjpeg-turbo is an external open-source dependency resolved through CMake `FindJPEG`.
11
11
- The supported Windows toolchain is MSYS2 UCRT64 with MinGW-w64 GCC; Clang is also validated. Visual Studio is not required.
@@ -32,7 +32,7 @@ ctest --preset test-gcc-release
32
32
33
33
- C++17, four spaces, braces on new lines.
34
34
- Types/public methods use `PascalCase`; locals/parameters use `camelCase`; fields use `m_`.
35
-
- Prefer RAII, explicit ownership, and `PYRAMID_LOG_*` diagnostics. Geometry passed to scenes must use `Mesh`; do not reintroduce raw vertex-array fields on `RenderObject`.
35
+
- Prefer RAII, explicit ownership, and `PYRAMID_LOG_*` diagnostics. Geometry passed to scenes must use `Mesh`; do not reintroduce raw vertex-array fields on `RenderObject`. Shared reusable geometry should be acquired through a graphics-device-bound `MeshCache`; do not create parallel uploads for byte-identical mesh specifications.
36
36
- Do not add required interface methods with silent no-op defaults.
37
37
- Do not expose source-tree absolute paths through installed target interfaces.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+9Lines changed: 9 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,15 @@ All notable changes to Pyramid Engine are documented here. The project is pre-al
4
4
5
5
## [Unreleased]
6
6
7
+
### Stable mesh identifiers and resource caching
8
+
9
+
- Added deterministic 128-bit `MeshAssetId` values from caller-owned stable names or exact mesh content. Content fingerprints include vertex/index bytes, layout semantics, counts, normalization flags, and primitive topology while excluding debug names.
10
+
- Added `MeshCache`, which owns one resident GPU mesh per unique content fingerprint and resolves any number of stable asset-ID aliases to that upload.
11
+
- Added hard conflict detection when one explicit asset identifier is reused for different resident geometry.
12
+
- Added explicit `Evict()`, `CollectUnused()`, and `Clear()` lifetime controls; cache eviction releases cache ownership without invalidating external `shared_ptr<Mesh>` instances.
- Migrated both examples to the cache and added `Graphics.MeshCache` coverage for deterministic IDs, alias deduplication, upload counts, conflicts, residency, collection, eviction, and external-owner lifetime.
15
+
7
16
### Engine-owned mesh resources
8
17
9
18
- Added `Mesh` and `MeshSpecification` as the authoritative geometry resource for vertex/index ownership, layout, draw count, primitive topology, and immutable local bounds.
0 commit comments